package com.fowo.api.sys.service;

import com.fowo.api.common.util.FilenameUtils;

import java.io.InputStream;
import java.util.UUID;

/**
 * 文件存储服务
 */
public interface FileStorageService {
    default String createStorageKey(String filename) {
        final String extension = FilenameUtils.getExtension(filename);
        return String.format("%s%s", UUID.randomUUID(), extension);
    }

    /**
     * 写入文件流，返回存储键
     * @param filename 源文件名
     * @param inputStream 写入文件流
     * @return 存储键
     */
    default String write(String filename, InputStream inputStream) throws Exception {
        return write(filename, false, inputStream);
    }

    /**
     * 写入文件流，返回存储键
     * @param filename 源文件名
     * @param useFilenameAsKey 将源文件名直接做为存储键名
     * @param inputStream 写入文件流
     * @return 存储键
     */
    String write(String filename, boolean useFilenameAsKey, InputStream inputStream) throws Exception;

    /**
     * 指定存储键读取文件流
     * @param storageKey 存储键
     * @return 读取文件流
     */
    InputStream read(String storageKey) throws Exception;

    /**
     * 删除指定存储键对应的文件
     * @param storageKey 存储键
     */
    void delete(String storageKey) throws Exception;
}
